wso2 identity server架构简述
WSO2 Identity Server为企业WEB应用提供复杂的身份管理及安全认证服务。以下是wso2的架构图。一开始看这个架构图可能会有些困惑,箭头很杂乱,不知所云。为了方便理解,可以把以下架构图分为两部分来看。一部分是身份认证流程,另一部分是用户和访问权限管理框架。
身份认证流程
首先,Service Provicers是用来配置web应用的,也就是把你的wep app与wso2 is联系起来,当然你的应用要按照wso2 is规定的规范来实现登陆,登陆方式支持SAML SSO、OAuth/OpenID Connect、Passive STS、OpenID等。
当用户要访问Service Providers中的应用时,Service Providers将授权请求消息传送给Inbound Authentication。Inbound Authentication主要有两个组件Request Processor和Response Builder。Request Processor用来处理Service Provider的授权请求。例如,SAML Request Processor处理SAML的授权请求,然后处理成authentication framework可接受的请求。另外,authentication framework接受的请求是与协议无关的,也就是说,Request Processor会接受各种协议的请求类型,之后处理成统一的authentication framework可接受的请求格式。
authentication framework接受到请求之后的工作就是claim映射,claim是在service provider和Identity Provider中配置的。claim的官方描述是对身份信息的一种通用的定义。之后,authentication framework就是要将映射后的请求转交给Local Authentication或者是Federated Authentication,这就要看用户要登陆的这个Service Provider是如何配置的。
Local Authentication很容易理解,就是将请求与user store中的用户信息匹配,是wso2 is中直接支持的验证方式,而Federated Authentication并不是wso2 is中的所支持的验证,需要配置额外的应用来支持验证,具体做法就是自己配置一个identity provider,对identity provider就是在这个地方使用的…
多数情况下我们还是使用Local Authentication。Local Authentication支持两种验证,也都很好理解,一个是username/password方式,另一个则是iwa方式(iwa其实是就使用windows账户来登陆)。显然Local Authentication接下来就是要从user store中读取用户信息,在user store manager模块实现了三种访问方式LDAP、AD、JDBC,在添加每个user store的时候都可以选择这三种方式中的一种。例如,我使用MySql数据库,选用JDBC访问方式添加一个user store。
Local Authentication验证完成之后会通知框架,框架检查若不需要其他验证(可以配置多次不的验证),则将控制权转交给Inbound Authentication中的Response Builder,由Response Builder给end-user一个回应。
至此,验证流程结束。涉及的组件有Service Provider、Inbound Authentication、authentication framework、Local Authentication/Federated Authentication、User Store Manager。其余的都可以看作用户和访问权限管理了。
接下来,分析一下架构图中其他箭头表示的作用。
用户和访问权限管理
用户注册
在service provider某应用上注册用户(end-users),注册信息交由Inbound Provisioning处理,Inbound Provisioning支持SOAP和SCIM(都是用于网络中交换数据),然后,Inbound Provisioning连接User Store Manager进行存储。
向外部应用提供用户信息
wso2 is支持向外部系统提供用户信息,例如,Google App Engine。需要配置一个identity provider,并与一个service provider联系起来,由该service provider提供服务。
将第三方登陆的账号加入user store
当一个service provider由第三方账户登陆时,Authentication Framework的JIT(Just-In-Time)判断该账户是否存在user store中,如果没有,JIT就把此账户信息传递给provisioning framework,随后添加到user store中,存储到哪个user store,在Identity Provider的配置中可以选择。
详细介绍可参考官方文档
个人觉得官方文档内容比较全面,但是讲述逻辑不够清晰,容易导致理解进入误区,搞清楚每个组件的功能之后,再来看整个架构就简单多了